package TCPMain.utils;

import android.util.Log;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

/**
 * 实现 DataUtilInterface 接口，提供获取数据的方法
 */
public class DataUtil implements DataUtilInterface {
    String TAG = "DataUtil";

    /**
     * @param originalJson
     * @return
     */
    @Override
    public JSONObject GetData(String originalJson) {
        try {
            // 将字符串解析为 JSONObject
            JSONObject jsonObject = new JSONObject(originalJson);

            // 处理 SendFileLengths
            String sendFileLengthsStr = jsonObject.getString("SendFileLengths");
            // 去掉字符串的首尾括号，并分割为数组
            String[] sendFileLengthsArray = sendFileLengthsStr.substring(1, sendFileLengthsStr.length() - 1).split(",");
            JSONArray sendFileLengthsJsonArray = new JSONArray();
            for (String length : sendFileLengthsArray) {
                sendFileLengthsJsonArray.put(Integer.parseInt(length.trim()));
            }
            jsonObject.put("SendFileLengths", sendFileLengthsJsonArray);

            // 处理 SendFileNames
            String sendFileNamesStr = jsonObject.getString("SendFileNames");
            // 去掉字符串的首尾括号，并分割为数组
            String[] sendFileNamesArray = sendFileNamesStr.substring(1, sendFileNamesStr.length() - 1).split(",");
            JSONArray sendFileNamesJsonArray = new JSONArray();
            for (String name : sendFileNamesArray) {
                sendFileNamesJsonArray.put(name);
            }
            jsonObject.put("SendFileNames", sendFileNamesJsonArray);

            // 输出转换后的 JSON 字符串
            System.out.println("[ClientHandler.run 13:29:26] " + jsonObject.toString());
            return jsonObject;
        } catch (JSONException e) {
            Log.e(TAG, "GetData error:" + e.getMessage());
            return null;
        }
    }

    /**
     * @param jsonObject
     * @return
     */
    @Override
    public JSONObject GetData(JSONObject jsonObject) {
        try {
            if (jsonObject.has("SendFileNames") && jsonObject.has("SendFileLengths")) {
                // 处理 SendFileLengths
                String sendFileLengthsStr = jsonObject.getString("SendFileLengths");
                // 去掉字符串的首尾括号，并分割为数组
                String[] sendFileLengthsArray = sendFileLengthsStr.substring(1, sendFileLengthsStr.length() - 1).split(",");
                JSONArray sendFileLengthsJsonArray = new JSONArray();
                for (String length : sendFileLengthsArray) {
                    sendFileLengthsJsonArray.put(Integer.parseInt(length.trim()));
                }
                jsonObject.put("SendFileLengths", sendFileLengthsJsonArray);

                // 处理 SendFileNames
                String sendFileNamesStr = jsonObject.getString("SendFileNames");
                // 去掉字符串的首尾括号，并分割为数组
                // 将字符串转换为标准文件名数组的完整处理流程：

                // 1. 移除字符串首尾的方括号（假设原始格式为 "[file1,file2]"）
                // 示例输入："[file1.txt, file2.jpg]" → 处理后变成 "file1.txt, file2.jpg"
                String[] sendFileNamesArray = sendFileNamesStr.substring(1, sendFileNamesStr.length() - 1)
                        // 2. 按逗号分割字符串为数组（注意：如果文件名本身含逗号会导致错误）
                        .split(",");

                // 3. 创建空的JSON数组容器
                JSONArray sendFileNamesJsonArray = new JSONArray();

                // 4. 遍历处理每个原始文件名
                for (String name : sendFileNamesArray) {
                    // 5. 清理数据：先去除前后空格 → 再移除反斜杠(处理Windows路径兼容问题)
                    // 示例：" \"file1.txt\" " → 处理后变成 "file1.txt"
                    //String cleanedName = name.trim().replace("\\", "");

                    // 6. 将处理后的有效文件名加入JSON数组
                    sendFileNamesJsonArray.put(name);
                }

                // 7. 将标准化的JSON数组存回原始数据对象
                // 效果：将类似 "[file1, file2]" 的字符串转换为 ["file1","file2"] 的JSON数组
                jsonObject.put("SendFileNames", sendFileNamesJsonArray);

                // 输出转换后的 JSON 字符串
                System.out.println("[ClientHandler.run 13:29:26] " + jsonObject.toString());
            }

        } catch (JSONException e) {
            Log.e(TAG, "GetData error:" + e.getMessage());
            return null;
        }
        return jsonObject;
    }
}
